package com.hochschild.sgv.struts.action;

import com.hochschild.sgv.domain.CatalogoDetalle;
import com.hochschild.sgv.domain.Feriado;
import com.hochschild.sgv.domain.PersonalSap;
import com.hochschild.sgv.domain.Solicitud;
import com.hochschild.sgv.domain.Usuario;
import com.hochschild.sgv.domain.Vacacion;

import com.hochschild.sgv.service.CatalogoManager;
import com.hochschild.sgv.service.EquipoManager;
import com.hochschild.sgv.service.FeriadoManager;
import com.hochschild.sgv.service.SolicitudManager;
import com.hochschild.sgv.service.UsuarioManager;
import com.hochschild.sgv.service.VacacionesManager;
import com.hochschild.sgv.util.Constantes;
import com.hochschild.sgv.util.EnviarCorreo;
import java.sql.Date;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.springframework.beans.factory.annotation.Autowired;

public class SolicitudAction extends DispatchAction {

    @Autowired
    private SolicitudManager solicitudManager;
    @Autowired
    private UsuarioManager usuarioManager;
    @Autowired
    private VacacionesManager vacacionesManager;
    @Autowired
    private CatalogoManager catalogoManager;
    @Autowired
    private EquipoManager equipoManager;
    @Autowired
    private FeriadoManager feriadoManager;

    public EquipoManager getEquipoManager() {
        return equipoManager;
    }

    public void setEquipoManager(EquipoManager equipoManager) {
        this.equipoManager = equipoManager;
    }

    public CatalogoManager getCatalogoManager() {
        return catalogoManager;
    }

    public void setCatalogoManager(CatalogoManager catalogoManager) {
        this.catalogoManager = catalogoManager;
    }

    public ActionForward enviarSolicitud(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String fechaInicioVacaciones = request.getParameter("fechaInicioVacaciones");
        String fechaFinVacaciones = request.getParameter("fechaFinVacaciones");
        String diasHabiles = request.getParameter("diasHabiles");
        String aprobador = request.getParameter("aprobador");
        String solicitante = request.getParameter("solicitante");
        String fechaActual = request.getParameter("fechaActual");
        String estado = Constantes.SOLICITUD_POR_APROBAR;
        Date fechaInicio = null, fechaFinal = null, fechaHoy = null;
        DateFormat df = new SimpleDateFormat("dd/MM/yyyy");

        try {
            fechaInicio = new Date(df.parse(fechaInicioVacaciones).getTime());
            fechaFinal = new Date(df.parse(fechaFinVacaciones).getTime());
            fechaHoy = new Date(df.parse(fechaActual).getTime());
        } catch (Exception e) {
            System.out.println(e.toString());
        }
        Solicitud solicitud = new Solicitud();
        solicitud.setFechaInicio(fechaInicio);
        solicitud.setFechaFin(fechaFinal);
        solicitud.setDiasHabiles(Integer.parseInt(diasHabiles));
        solicitud.setIdUsuarioAprobador(aprobador);
        solicitud.setEstado(estado);
        solicitud.setIdUsuarioSolicitante(solicitante);


        Usuario usuarioSolicitante = new Usuario();
        usuarioSolicitante.setIdUsuario(solicitante);
        usuarioSolicitante = usuarioManager.getUsuarioById(usuarioSolicitante);


        Usuario usuarioJefe = new Usuario();
        System.out.println("valor id puesto "+usuarioSolicitante.getIdPuestoJefeInmediato());
        System.out.println("vvv "+usuarioSolicitante.getIdPuestoJefeInmediato());
        usuarioJefe.setIdPuesto(usuarioSolicitante.getIdPuestoJefeInmediato());
        Usuario usuario_Jefe = usuarioManager.getUsuarioPorIdPuesto(usuarioJefe);
        String mensaje = "";
        boolean result = false;
        try {
            result = solicitudManager.insertSolicitud(solicitud);
        } catch (Exception e) {
            mensaje = e.getMessage();
        }

        if (result) {
            System.out.println("Insertó");
            mensaje = "La solicitud ";


            EnviarCorreo enviaCorreo = new EnviarCorreo(obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.SERVIDOR_CORREO), obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.ALIAS_MAIL_CORREO), obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.ALIAS_MAIL_RRHH));
            String mensajeCorreo = enviaCorreo.envioSolicitud(usuarioSolicitante, usuario_Jefe, solicitud);
            
            if (mensajeCorreo.equals("1")) {
                mensaje += "se realizó con éxito ";
            } else {
                mensaje += "no se realizó con éxito por el siguiente error \n";
                mensaje += mensajeCorreo;
            }
        } else {
            System.out.println("No insertó");
        }

        List<Solicitud> listaSolicitudes = solicitudManager.getListaPorUsuarioEstado(solicitante, Constantes.SOLICITUD_APROBADA, Constantes.SOLICITUD_POR_APROBAR, fechaHoy);
        request.setAttribute("lstSolicitudes", listaSolicitudes);
        response.getWriter().println(mensaje);
        return null;
    }

    public ActionForward cargarSolicitudesPorAprobador(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

        String idUsuarioAprobador = request.getParameter("idUsuarioAprobador");
        List<Solicitud> lstSolicitudesAprobadas = solicitudManager.getListaPorAprobadorEstado(idUsuarioAprobador, Constantes.SOLICITUD_POR_APROBAR);
        JSONObject jsonObject = new JSONObject();
        if (lstSolicitudesAprobadas.isEmpty()) {
            System.out.println("No hay solicitudes asociadas");
        } else {
            JSONArray jsonArray = new JSONArray();
            for (Solicitud solicitud : lstSolicitudesAprobadas) {
                JSONObject jsonObject1 = new JSONObject();

                DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
                String fechaInicio = dateFormat.format(solicitud.getFechaInicio());
                String fechaFin = dateFormat.format(solicitud.getFechaFin());

                jsonObject1.put("idSolicitud", solicitud.getIdSolicitud());
                Usuario usuario = new Usuario();
                usuario.setIdUsuario(solicitud.getIdUsuarioSolicitante());
                usuario = usuarioManager.getUsuarioById(usuario);
                jsonObject1.put("idUsuarioSolicitante", usuario.getIdUsuario());
                jsonObject1.put("nombre", usuario.getNombreUsuario());
                jsonObject1.put("apellido", usuario.getApellidoUsuario());
                jsonObject1.put("puesto", usuario.getPuestoUsuario());
                jsonObject1.put("fechaInicio", fechaInicio);
                jsonObject1.put("fechaFin", fechaFin);
                jsonObject1.put("diasHabiles", solicitud.getDiasHabiles());

                jsonArray.add(jsonObject1);
            }


            jsonObject.put("resultadoDetalle", jsonArray);
            request.setAttribute("lstSolicitudesAprobadas", lstSolicitudesAprobadas);
        }


        response.setContentType("application/json");
        response.getWriter().println(jsonObject.toString());
        return null;
    }

    public ActionForward cargarSolicitudesPorUsuario(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String idUsuarioSolicitante = request.getParameter("idUsuarioSolicitante");
        String fechaActual = request.getParameter("fechaActual");
        DateFormat dFormat = new SimpleDateFormat("dd/MM/yyyy");
        Date fecha = new Date(dFormat.parse(fechaActual).getTime());

        List<Solicitud> listaSolicitudes = solicitudManager.getListaPorUsuarioEstado(idUsuarioSolicitante, Constantes.SOLICITUD_APROBADA, Constantes.SOLICITUD_POR_APROBAR, fecha);
        JSONObject jsonObject = new JSONObject();
        if (listaSolicitudes.isEmpty()) {
            System.out.println("No hay solicitudes asociadas");
        } else {
            System.out.println("Tiene solicitudes asociadas");
            JSONArray jsonArray = new JSONArray();
            for (Solicitud solicitud : listaSolicitudes) {
                JSONObject jsonObject1 = new JSONObject();

                DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
                String fechaInicio = dateFormat.format(solicitud.getFechaInicio());
                String fechaFin = dateFormat.format(solicitud.getFechaFin());

                jsonObject1.put("idSolicitud", solicitud.getIdSolicitud());
                jsonObject1.put("fechaInicio", fechaInicio);
                jsonObject1.put("fechaFin", fechaFin);
                jsonObject1.put("diasHabiles", solicitud.getDiasHabiles());
                jsonObject1.put("estado", solicitud.getEstado());
                jsonObject1.put("usuarioAprobador", solicitud.getIdUsuarioAprobador());
                Usuario usuarioJefe = new Usuario();
                usuarioJefe.setIdPuesto(solicitud.getIdUsuarioAprobador());
                usuarioJefe = usuarioManager.getUsuarioPorIdPuesto(usuarioJefe);
                jsonObject1.put("nombreAprobador", usuarioJefe.getNombreUsuario());
                jsonObject1.put("apellidoAprobador", usuarioJefe.getApellidoUsuario());
                jsonArray.add(jsonObject1);
            }

            jsonObject.put("resultadoDetalle", jsonArray);
            request.setAttribute("lstSolicitudes", listaSolicitudes);
        }


        response.setContentType("application/json");
        response.getWriter().println(jsonObject.toString());
        return null;
    }

    public ActionForward anularSolicitud(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String arrayJSON = request.getParameter("procesados");
        String solicitante = request.getParameter("solicitante");
        String fechaActual = request.getParameter("fechaActual");
        String strModRes = "";


        Date fechaHoy = null;
        DateFormat df = new SimpleDateFormat("dd/MM/yyyy");

        try {
            fechaHoy = new Date(df.parse(fechaActual).getTime());
        } catch (Exception e) {
            System.out.println(e.toString());
        }


        JSONArray solicitudArrayJSON = (JSONArray) JSONSerializer.toJSON(arrayJSON);
        int tamanio = solicitudArrayJSON.size();

        List<Solicitud> list = new ArrayList<Solicitud>();

        for (int i = 0; i < tamanio; i++) {
            Solicitud solicitud = new Solicitud();
            solicitud.setEstado(solicitudArrayJSON.getJSONObject(i).getString("estado"));
            solicitud.setIdSolicitud(solicitudArrayJSON.getJSONObject(i).getInt("idSolicitud"));
            solicitud.setIdUsuarioSolicitante(solicitante);
            solicitud.setIdUsuarioAprobador(solicitudArrayJSON.getJSONObject(i).getString("idUsuarioAprobador"));

            DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
            Date fechaInicio = new Date(dateFormat.parse(solicitudArrayJSON.getJSONObject(i).getString("fechaInicio")).getTime());
            Date fechaFin = new Date(dateFormat.parse(solicitudArrayJSON.getJSONObject(i).getString("fechaFin")).getTime());
            solicitud.setFechaInicio(fechaInicio);
            solicitud.setFechaFin(fechaFin);

            list.add(solicitud);
        }


        Usuario usuarioSolicitante = new Usuario();
        usuarioSolicitante.setIdUsuario(solicitante);
        usuarioSolicitante = usuarioManager.getUsuarioById(usuarioSolicitante);


        for (Solicitud sol : list) {
            try {
                if (sol.getEstado().equals("Por aprobar") || sol.getEstado().equals("Rechazada")) {
                    sol.setEstado(Constantes.SOLICITUD_ANULADA);

                    if (solicitudManager.deleteLogicoSolicitud(sol)) {
                        strModRes = "La anulación se realizó correctamente, ";
                        Usuario usuarioJefe = new Usuario();
                        usuarioJefe.setIdPuesto(sol.getIdUsuarioAprobador());
                        Usuario usuario_Jefe = usuarioManager.getUsuarioPorIdPuesto(usuarioJefe);
                        EnviarCorreo enviaCorreo = new EnviarCorreo(obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.SERVIDOR_CORREO), obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.ALIAS_MAIL_CORREO), obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.ALIAS_MAIL_RRHH));
                        String mensajeCorreo = enviaCorreo.anulaSolicitudParaJefe(usuarioSolicitante, usuario_Jefe, sol, "S");
                        if (mensajeCorreo.equals("1")) {
                            strModRes += "se notificará con un correo a su jefe inmediato.";
                        } else {
                            strModRes += "no se notificará con un correo a su jefe inmediato por el siguiente error \n";
                            strModRes += mensajeCorreo;
                        }
                    } else {
                        strModRes = "Hubo un error en registro sql";
                    }
                } else {
                    String respuesta = vacacionesManager.anularVacaciones(sol.getIdUsuarioSolicitante(), formateaFechaSAP(sol.getFechaInicio()), formateaFechaSAP(sol.getFechaFin()));
                    strModRes = respuesta.substring(1).trim();
                    if (respuesta.substring(0, 1).trim().equals("0")) {
                        sol.setEstado(Constantes.SOLICITUD_ANULADA);
                        if (!solicitudManager.deleteLogicoSolicitud(sol)) {
                            strModRes = "Hubo un error en registro sql";
                        } else {
                            Usuario usuarioJefe = new Usuario();
                            usuarioJefe.setIdPuesto(sol.getIdUsuarioAprobador());
                            Usuario usuario_Jefe = usuarioManager.getUsuarioPorIdPuesto(usuarioJefe);
                            EnviarCorreo enviaCorreoJefe = new EnviarCorreo(obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.SERVIDOR_CORREO), obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.ALIAS_MAIL_CORREO), obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.ALIAS_MAIL_RRHH));
                            String mensajeCorreoJefe = enviaCorreoJefe.anulaSolicitudParaJefe(usuarioSolicitante, usuario_Jefe, sol, "V");

                            if (mensajeCorreoJefe.equals("1")) {
                                strModRes = "La anulación se realizó correctamente, se notificará con un correo a su jefe inmediato.";
                            } else {
                                strModRes = "La anulación se realizó correctamente, no se notificará con un correo a su jefe inmediato por el siguiente error \n";
                                strModRes += mensajeCorreoJefe;
                            }


                            EnviarCorreo enviaCorreoRRHH = new EnviarCorreo(obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.SERVIDOR_CORREO), obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.ALIAS_MAIL_CORREO), obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.ALIAS_MAIL_RRHH));
                            String mensajeCorreoRRHH = enviaCorreoRRHH.anulaSolicitudParaJefe(usuarioSolicitante, usuario_Jefe, sol, "");

                            if (mensajeCorreoRRHH.equals("1")) {
                                System.out.println("y se envió la notificación a RRHH");
                            } else {
                                System.out.println(" y no se envió la notificación a RRHH por el siguiente error : " + mensajeCorreoRRHH);
                            }


                        }
                    }
                }

            } catch (Exception e) {
                e.printStackTrace();
                strModRes = e.getMessage();
            }

        }
        List<Solicitud> listaSolicitudes = solicitudManager.getListaPorUsuarioEstado(solicitante, Constantes.SOLICITUD_APROBADA, Constantes.SOLICITUD_POR_APROBAR, fechaHoy);
        request.setAttribute("lstSolicitudes", listaSolicitudes);
        response.getWriter().println(strModRes);
        return null;
    }

    public ActionForward aprobarSolicitud(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String arrayJSON = request.getParameter("procesados");
        String aprobador = request.getParameter("aprobador");
        String strModRes = "";


        Usuario usuarioJefe = new Usuario();
        usuarioJefe.setIdUsuario(aprobador);
        usuarioJefe = usuarioManager.getUsuarioById(usuarioJefe);

        JSONArray solicitudArrayJSON = (JSONArray) JSONSerializer.toJSON(arrayJSON);
        int tamanio = solicitudArrayJSON.size();

        List<Solicitud> list = new ArrayList<Solicitud>();

        for (int i = 0; i < tamanio; i++) {
            Solicitud solicitud = new Solicitud();
            solicitud.setEstado(Constantes.SOLICITUD_APROBADA);
            solicitud.setIdSolicitud(solicitudArrayJSON.getJSONObject(i).getInt("idSolicitud"));
            solicitud.setIdUsuarioSolicitante(solicitudArrayJSON.getJSONObject(i).getString("idUsuarioSolicitante"));
            DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
            Date fechaInicio = new Date(dateFormat.parse(solicitudArrayJSON.getJSONObject(i).getString("fechaInicio")).getTime());
            Date fechaFin = new Date(dateFormat.parse(solicitudArrayJSON.getJSONObject(i).getString("fechaFin")).getTime());
            solicitud.setFechaInicio(fechaInicio);
            solicitud.setFechaFin(fechaFin);
            list.add(solicitud);
        }

        for (Solicitud sol : list) {
            try {
                String respuesta = vacacionesManager.aprobarVacaciones(sol.getIdUsuarioSolicitante(), formateaFechaSAP(sol.getFechaInicio()), formateaFechaSAP(sol.getFechaFin()));
                strModRes = respuesta.substring(1).trim();
                if (respuesta.substring(0, 1).trim().equals("0")) {
                    if (!solicitudManager.updateSolicitud(sol)) {
                        strModRes = "Hubo un error en registro sql";
                    } else {
                        Usuario usuarioSolicitante = new Usuario();
                        usuarioSolicitante.setIdUsuario(sol.getIdUsuarioSolicitante());
                        usuarioSolicitante = usuarioManager.getUsuarioById(usuarioSolicitante);

                        EnviarCorreo enviaCorreoCol = new EnviarCorreo(obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.SERVIDOR_CORREO), obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.ALIAS_MAIL_CORREO), obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.ALIAS_MAIL_RRHH));
                        EnviarCorreo enviaCorreoRRHH = new EnviarCorreo(obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.SERVIDOR_CORREO), obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.ALIAS_MAIL_CORREO), obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.ALIAS_MAIL_RRHH));
                        String mensajeCorreoCol = enviaCorreoCol.apruebaSolicitudParaColaborador(usuarioSolicitante, sol);
                        String mensajeCorreoRRHH = enviaCorreoRRHH.apruebaSolicitud(usuarioSolicitante, sol);

                        if (mensajeCorreoCol.equals("1")) {
                            strModRes = "La solicitud fue aprobada con éxito. Se enviará una notificación al correo de su colaborador.";
                        } else {
                            strModRes = "La solicitud fue aprobada con éxito. No se enviará una notificación al correo de su colaborador por el siguiente error \n";
                            strModRes += mensajeCorreoCol;
                        }

                        if (mensajeCorreoRRHH.equals("1")) {
                            System.out.println("se envió la notificación a RRHH");
                        } else {
                            System.out.println("y no se envió la notificación a RRHH por el siguiente error");
                        }
                    }
                }
            } catch (Exception e) {
                strModRes = e.getMessage();
            }

        }
        response.getWriter().println(strModRes);
        return null;
    }

    private String formateaFechaSAP(Date fecha) {
        DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        String fechaSap = dateFormat.format(fecha);
        return fechaSap;
    }

    private String limpiarCaracteres(String cadena) {
        if (cadena != null || !cadena.equals("")) {
            cadena = cadena.replaceAll("Ã¡", "á");
            cadena = cadena.replaceAll("Ã©", "é");
            cadena = cadena.replaceAll("Ã­", "í");
            cadena = cadena.replaceAll("Ã³", "ó");
            cadena = cadena.replaceAll("Ãº", "ú");

        }
        return cadena;
    }

    public ActionForward rechazarSolicitud(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String arrayJSON = request.getParameter("procesados");
        String motivoSolicitud = limpiarCaracteres(request.getParameter("motivoSolicitud"));
        String strModRes = "";

        JSONArray solicitudArrayJSON = (JSONArray) JSONSerializer.toJSON(arrayJSON);
        int tamanio = solicitudArrayJSON.size();

        List<Solicitud> list = new ArrayList<Solicitud>();

        for (int i = 0; i < tamanio; i++) {
            Solicitud solicitud = new Solicitud();
            solicitud.setEstado(Constantes.SOLICITUD_RECHAZADA);
            solicitud.setIdSolicitud(solicitudArrayJSON.getJSONObject(i).getInt("idSolicitud"));
            solicitud.setIdUsuarioSolicitante(solicitudArrayJSON.getJSONObject(i).getString("idUsuarioSolicitante"));
            DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
            Date fechaInicio = new Date(dateFormat.parse(solicitudArrayJSON.getJSONObject(i).getString("fechaInicio")).getTime());
            Date fechaFin = new Date(dateFormat.parse(solicitudArrayJSON.getJSONObject(i).getString("fechaFin")).getTime());
            solicitud.setFechaInicio(fechaInicio);
            solicitud.setFechaFin(fechaFin);
            if (motivoSolicitud == null) {
                motivoSolicitud = "";
            }
            solicitud.setMotivoSolicitud(motivoSolicitud);
            list.add(solicitud);
        }

        for (Solicitud sol : list) {
            try {
                if (solicitudManager.updateSolicitud(sol)) {
                    strModRes = "La solicitud fue rechazada con éxito.";
                    Usuario usuarioSolicitante = new Usuario();
                    usuarioSolicitante.setIdUsuario(sol.getIdUsuarioSolicitante());
                    usuarioSolicitante = usuarioManager.getUsuarioById(usuarioSolicitante);
                    EnviarCorreo enviaCorreo = new EnviarCorreo(obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.SERVIDOR_CORREO), obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.ALIAS_MAIL_CORREO), obtieneConfiguracionCorreo(Constantes.CONFIGURACION_CORREO, Constantes.ALIAS_MAIL_RRHH));
                    String mensajeCorreo = enviaCorreo.rechazaSolicitudParaColaborador(usuarioSolicitante, sol);
                    if (mensajeCorreo.equals("1")) {
                        strModRes += " Se enviará una notificación al correo de su colaborador.";
                    } else {
                        strModRes += " No se enviará una notificación al correo de su colaborador por el siguiente error \n";
                        strModRes += mensajeCorreo;
                    }
                }
            } catch (Exception e) {
                strModRes = e.getMessage();
            }

        }
        response.getWriter().println(strModRes);
        return null;
    }

   

    public String obtieneConfiguracionCorreo(String constanteCab, String constanteDet) {
        List<CatalogoDetalle> detalleCatalogo = catalogoManager.getDetalleCatalogo(constanteCab);
        for (CatalogoDetalle dc : detalleCatalogo) {
            if (dc.getAbreviatura().equals(constanteDet)) {
                return dc.getDescripcion();

            }

        }
        return "";
    }
    
    public ActionForward cargarSolicitudes(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("cargarSolicitudes");
         HttpSession session = request.getSession();
         Usuario usuario = (Usuario) session.getAttribute("session_usuario"); 
        
         try {
                java.util.Date today = new java.util.Date();
                java.sql.Date sqlToday = new java.sql.Date(today.getTime());

                    //Obtiene Lista de Solicitudes SQL
                List<Solicitud> lstSolicitudes = solicitudManager.getListaPorUsuarioEstado(usuario.getIdUsuario(), Constantes.SOLICITUD_APROBADA, Constantes.SOLICITUD_POR_APROBAR, sqlToday);
                request.setAttribute("lstSolicitudes", lstSolicitudes);

                    //Obtiene Lista de Feriados SAP
                List<Feriado> lstFeriados = feriadoManager.obtieneFeriados(usuario.getDivisionUsuario(), formateaFechaSAP(getPrimerDiaDelAnio()), formateaFechaSAP(getUltimoDiaDelAnio()));
                request.setAttribute("lstFeriados", lstFeriados);

            } catch (Exception e) {
                System.out.println(e.toString());
            }
         
//            Jefe del Usuario
         Usuario usuarioJefe = new Usuario();
        usuarioJefe.setIdPuesto(usuario.getIdPuestoJefeInmediato());
        System.out.println("IdPuesto: " + usuario.getIdPuestoJefeInmediato());
            //Obtiene la data del Jefe del usario Ingresado SQL
        Usuario usuario_Jefe = null;
        if ( usuario.getIdPuestoJefeInmediato()!= null && !usuario.getIdPuestoJefeInmediato().equals("")) 
            usuario_Jefe = usuarioManager.getUsuarioPorIdPuesto(usuarioJefe);
        
        if (usuario_Jefe != null) {
            System.out.println("Tiene Jefe");
            request.setAttribute("usuario_jefe", usuario_Jefe);
        }
                    
           return mapping.findForward("solicitudes");
    }

public ActionForward cargarBandejaAprobacion(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
     System.out.println("cargarBandejaAprobacion");
         HttpSession session = request.getSession();
         Usuario usuario = (Usuario) session.getAttribute("session_usuario"); 
    
         List<Solicitud> lstSolicitudesAprobadas = solicitudManager.getListaPorAprobadorEstado(usuario.getIdPuesto(), Constantes.SOLICITUD_POR_APROBAR);
        if (lstSolicitudesAprobadas.isEmpty()) {
            System.out.println("No hay solicitudes por aprobar asociadas");
        } else {
            System.out.println("Hay solicitudes por aprobar asociadas");
        }

        request.setAttribute("lstSolicitudesAprobadas", lstSolicitudesAprobadas);
    return mapping.findForward("bandejaAprobacion");
}    
private static Date getPrimerDiaDelAnio() {

    Calendar cal = Calendar.getInstance();

    cal.set(cal.get(Calendar.YEAR),
            cal.getActualMinimum(Calendar.MONTH),
            cal.getActualMinimum(Calendar.DAY_OF_MONTH),
            cal.getMinimum(Calendar.HOUR_OF_DAY),
            cal.getMinimum(Calendar.MINUTE),
            cal.getMinimum(Calendar.SECOND));
    java.util.Date utilFecha = cal.getTime();
    java.sql.Date sqlFecha = new java.sql.Date(utilFecha.getTime());

    return sqlFecha;

}

    private static Date getUltimoDiaDelAnio() {

        Calendar cal = Calendar.getInstance();

        cal.set(cal.get(Calendar.YEAR),
                cal.getActualMaximum(Calendar.MONTH),
                cal.getActualMaximum(Calendar.DAY_OF_MONTH),
                cal.getMaximum(Calendar.HOUR_OF_DAY),
                cal.getMaximum(Calendar.MINUTE),
                cal.getMaximum(Calendar.SECOND));
        java.util.Date utilFecha = cal.getTime();
        java.sql.Date sqlFecha = new java.sql.Date(utilFecha.getTime());

        return sqlFecha;

    }
}
